package com.example.demo.reflect;

import java.lang.reflect.Constructor;

/**
 * @author zengqingfa
 * @className ReflectDemo
 * @description
 * @create 2022/11/19 17:35
 */
public class ReflectDemo {

    public static void main(String[] args) throws Exception {
        /**
         * com.example.demo.reflect.ReflectDemo@7530d0a
         * com.example.demo.reflect.ReflectDemo@27bc2616
         * com.example.demo.reflect.ReflectDemo@3941a79c
         */
        //new 方式创建对象
        ReflectDemo reflectDemo= new ReflectDemo();
        System.out.println(reflectDemo);

        //反射获取Class对象
//        (1)Class<ReflectDemo> reflectDemoClass = ReflectDemo.class;
        Class<ReflectDemo> reflectDemoClass1 = ReflectDemo.class;
//       (2)Class<?> aClass = Class.forName ("com.example.demo.reflect.ReflectDemo");
        Class<?> reflectDemoClass2 = Class.forName("com.example.demo.reflect.ReflectDemo");
//        (3)Class<? extends Class> aClass = reflectDemoClass.getClass ();
        Class<ReflectDemo> reflectDemoClass3 = ReflectDemo.class;

        //反射创建对象方式一：通过newInstance创建对象
        ReflectDemo reflectDemo1 = reflectDemoClass1.newInstance();
        System.out.println(reflectDemo1);

        //反射创建对象方式二：通过构造器创建对象
        Constructor<?> constructor = reflectDemoClass2.getConstructor();
        Object reflectDemo2 = constructor.newInstance();
        System.out.println(reflectDemo2);
    }
}